home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagg_m.zip
/
INTERRUP.SWG
/
0016_How to Grab Interrupts.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-02-03
|
1KB
|
55 lines
Uses Dos;
var
ExitSave,
BKDISave,
BKDIHandler : Pointer;
Regs : Registers;
Abort : Boolean;
{$F+}
procedure NewCntlBreakHandler(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);
interrupt;
begin
inline($FA); { disable interrupts }
{ do nada widda data } { OR DO ANYTHING YOU WANT }
inline($FB); { enable interrupts }
Abort := True; { Use this for (while NOT abort do..) }
end;
procedure NewBKDIHandler(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);
interrupt;
begin
inline($FA); { disable interrupts }
{ do nada widda data } { OR DO ANYTHING YOU WANT }
inline($FB); { enable interrupts }
AX := 0; {This must remain. An oversight in Turbo Pascal.}
end;
procedure MyExit;
begin
ExitProc := ExitSave;
SetIntVec($1B, BKDISave);
SetIntVec($24, BKDIHandler);
end;
{$F-}
begin
ExitSave := ExitProc;
ExitProc := @MyExit;
Regs.AH := $35; { Get Cntl-Break Interrupt Vector }
Regs.AL := $1B;
Intr($21,Regs);
BKDISave := Ptr(Regs.ES, Regs.BX);
SetIntVec($1B, @NewBKDIHandler);
Regs.AH := $35; { Get Cntl-Break Handler Interrupt Vector }
Regs.AL := $23;
Intr($21,Regs);
BKDIHandler := Ptr(Regs.ES, Regs.BX);
SetIntVec($23, @NewCntlBreakHandler);
{ Do whatever here. When finished, the old interrupt vectors are
restored in the MyExit procedure }
end.